import { ElMessage } from 'element-plus'

const state = {
  products: [],
  categories: [],
  loading: false,
  currentProduct: null
}

const mutations = {
  SET_PRODUCTS: (state, products) => {
    state.products = products
  },
  SET_CATEGORIES: (state, categories) => {
    state.categories = categories
  },
  SET_LOADING: (state, loading) => {
    state.loading = loading
  },
  SET_CURRENT_PRODUCT: (state, product) => {
    state.currentProduct = product
  },
  UPDATE_PRODUCT_STATUS: (state, { id, status }) => {
    const product = state.products.find(p => p.id === id)
    if (product) {
      product.status = status
    }
  }
}

const actions = {
  // 获取商品列表
  async getProducts({ commit, rootState }, { type = 'all', status = null } = {}) {
    try {
      commit('SET_LOADING', true)
      // 模拟API调用
      const products = [] // 这里应该是实际的API调用
      
      // 根据角色过滤商品
      if (rootState.user.roles.includes('merchant')) {
        return products.filter(p => p.merchantId === rootState.user.merchantId)
      }
      
      // 管理员可以看到所有商品
      return products
    } catch (error) {
      ElMessage.error('获取商品列表失败')
      return []
    } finally {
      commit('SET_LOADING', false)
    }
  },

  // 商户上架商品
  async createProduct({ commit, rootState }, productData) {
    try {
      if (!rootState.user.roles.includes('merchant')) {
        throw new Error('只有商户可以上架商品')
      }

      // 模拟API调用
      const product = {
        ...productData,
        merchantId: rootState.user.merchantId,
        status: 'online',
        createTime: new Date().toISOString()
      }

      // 这里应该是实际的API调用
      commit('SET_CURRENT_PRODUCT', product)
      ElMessage.success('商品上架成功')
      return product
    } catch (error) {
      ElMessage.error(error.message || '商品上架失败')
      throw error
    }
  },

  // 管理员下架商品
  async takeDownProduct({ commit, rootState }, { productId, reason }) {
    try {
      if (!rootState.user.roles.includes('admin')) {
        throw new Error('只有管理员可以强制下架商品')
      }

      // 模拟API调用
      // 这里应该是实际的API调用来下架商品
      commit('UPDATE_PRODUCT_STATUS', { id: productId, status: 'offline' })
      ElMessage.success('商品已下架')
    } catch (error) {
      ElMessage.error(error.message || '下架商品失败')
      throw error
    }
  },

  // 商户修改商品
  async updateProduct({ commit, rootState }, { productId, updateData }) {
    try {
      const product = state.products.find(p => p.id === productId)
      
      if (!product) {
        throw new Error('商品不存在')
      }

      if (rootState.user.roles.includes('merchant') && product.merchantId !== rootState.user.merchantId) {
        throw new Error('无权修改其他商户的商品')
      }

      // 模拟API调用
      const updatedProduct = {
        ...product,
        ...updateData,
        updateTime: new Date().toISOString()
      }

      // 这里应该是实际的API调用
      commit('SET_CURRENT_PRODUCT', updatedProduct)
      ElMessage.success('商品更新成功')
      return updatedProduct
    } catch (error) {
      ElMessage.error(error.message || '更新商品失败')
      throw error
    }
  },

  // 获取商品分类
  async getCategories({ commit }) {
    try {
      commit('SET_LOADING', true)
      // 模拟API调用
      const categories = [] // 这里应该是实际的API调用
      commit('SET_CATEGORIES', categories)
      return categories
    } catch (error) {
      ElMessage.error('获取分类失败')
      return []
    } finally {
      commit('SET_LOADING', false)
    }
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
} 